package WinterHomework.day08;

import java.util.Arrays;
import java.util.Stack;

//字符串逆置
public class Demo01 {
    public static void main(String[] args) {
        String str = "Ia am a student";
        System.out.println(reverseSentence(str));
    }

    public static String reverseSentence(String str) {
        if (str == null) {
            return null;
        }
        //答案方法
        char[] ch = str.toCharArray();
        //将整个字符串反转
        reverse(ch, 0, str.length() - 1);
        int start=0;
        for (int i = 0; i <= ch.length ; i++) {
            //当i自己是空格的时候，就说明她前面的是一个整体单词了
            //i == ch.length 必须在 ch[i]==' '前边判断，不然会出现数组索引越界
            if(i == ch.length || ch[i]==' '){
                reverse(ch,start,i-1);
                start=i+1;
            }
        }
        return String.copyValueOf(ch);
        //方法二
//        System.out.println(Arrays.toString(ch));
//        int i = 0;
//        int j = 0;
//        while (i < ch.length) {
//            if (ch[i] == ' ') {
//                i++;
//                j++;
//            } else if (j == ch.length || ch[j] == ' ') {
//                //还原单个单词顺序
//                reverse(ch, i, --j);
//                //移动到下一个单词开始位置
//                //此处必须为++j；因为要让i和j相同
//                i = ++j;
//            } else {
//                j++;
//            }
//        }
//        return String.copyValueOf(ch);
        //栈方法
//        String[] strs = str.split(" ");
//        Stack<String> stack = new Stack<>();
//        for (int i = 0; i < strs.length; i++) {
//            stack.push(strs[i]);
//        }
//        String sb = "";
//        int n = strs.length;
//        while (!stack.isEmpty()) {
//            sb += stack.pop();
//            if (n > 1) {
//                sb += " ";
//            }
//        }
//        return sb;
    }

    public static void reverse(char[] ch, int start, int end) {
        while (start < end) {
            char temp = ch[start];
            ch[start] = ch[end];
            ch[end] = temp;
            start++;
            end--;
        }
    }
}
